#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
#include "os.h"


void ChkError(os_error *Error) {
  if (Error != NULL) {
    fprintf(stderr,"OS-Error: %s\n",Error->errmess);
    exit(1);
  }
} /* ChkError */


int FreeSpace(char *FileName, int InitLen, int InitInc) {
  int FileHandle,reallen,len,inc;
  os_error *Error;
  os_regset Regs;

  do {
    Regs.r[0] = 0x83;
    Regs.r[1] = (int)FileName;
    ChkError(os_find(&Regs));
    FileHandle = Regs.r[0];
    Regs.r[0] = 6;
    Regs.r[1] = FileHandle;
    len = InitLen;
    reallen = InitLen;
    inc = InitInc;
    do {
      Regs.r[2] = len + inc;
      Error = os_args(&Regs);
      if (Error == NULL) {
        fprintf(stderr,"\rFree Space = %d",reallen);
        reallen = Regs.r[2];
        len = len + inc;
        if (reallen < len)
          inc = 0;
      } else {
        inc = 0;
      }
    } while (inc > 0);
    Regs.r[0] = 0;
    Regs.r[1] = FileHandle;
    ChkError(os_find(&Regs));
    InitInc /= 4;
    InitLen = reallen;
  } while (InitInc > 1024);
  remove(FileName);
  return reallen;
} /* FreeSpace */


int main(int argc, char **argv) {
  int Len;

  Len = FreeSpace(argv[1],0,512000);
  fprintf(stderr,"\rFree Space = %d\n",Len);
}
    
